from scipy.io import wavfile
from IPython.display import Audio
import numpy as np
import matplotlib.pyplot as plt
fs1, data1 = wavfile.read(r'C:\Users\JAY GOYAL\Forest.wav')
Audio(data=data1, rate=fs1)
print("sampling frequency: ",fs1)
plt.plot(data1)
plt.xlabel("n -->")
plt.ylabel("Amplitude -->")
sampling frequency: 44100
Text(0, 0.5, 'Amplitude -->')
from scipy import signal #Mam method
fs = 1000
t = np.arange(1000)/fs
signals = np.sin(2*np.pi*100*t)
plt.figure(figsize=(20,4))
plt.title("Signal A")
plt.plot(t,signals)
plt.xlabel("Frequency", color='r')
plt.ylabel("Amplitude", color='r')
Text(0, 0.5, 'Amplitude')
f1=abs(np.fft.fft(signals))
plt.stem(f1[:500])
<StemContainer object of 3 artists>
import librosa
file_path = 'Forest.wav'
samples , sampling_rate = librosa.load(file_path, sr = None, mono = True, offset = 0.0, duration = None)
len(samples), sampling_rate
(206388, 44100)
pip install librosa
Requirement already satisfied: librosa in c:\programdata\anaconda3\lib\site-packages (0.8.1) Requirement already satisfied: joblib>=0.14 in c:\programdata\anaconda3\lib\site-packages (from librosa) (1.0.1) Requirement already satisfied: audioread>=2.0.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (2.1.9) Requirement already satisfied: scikit-learn!=0.19.0,>=0.14.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (0.24.1) Requirement already satisfied: decorator>=3.0.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (5.0.6) Requirement already satisfied: pooch>=1.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (1.5.2) Requirement already satisfied: packaging>=20.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (20.9) Requirement already satisfied: resampy>=0.2.2 in c:\programdata\anaconda3\lib\site-packages (from librosa) (0.2.2) Requirement already satisfied: numba>=0.43.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (0.53.1) Requirement already satisfied: scipy>=1.0.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (1.6.2) Requirement already satisfied: numpy>=1.15.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (1.20.1) Requirement already satisfied: soundfile>=0.10.2 in c:\programdata\anaconda3\lib\site-packages (from librosa) (0.10.3.post1) Requirement already satisfied: setuptools in c:\programdata\anaconda3\lib\site-packages (from numba>=0.43.0->librosa) (52.0.0.post20210125) Requirement already satisfied: llvmlite<0.37,>=0.36.0rc1 in c:\programdata\anaconda3\lib\site-packages (from numba>=0.43.0->librosa) (0.36.0) Requirement already satisfied: pyparsing>=2.0.2 in c:\programdata\anaconda3\lib\site-packages (from packaging>=20.0->librosa) (2.4.7) Requirement already satisfied: requests in c:\programdata\anaconda3\lib\site-packages (from pooch>=1.0->librosa) (2.25.1) Requirement already satisfied: appdirs in c:\programdata\anaconda3\lib\site-packages (from pooch>=1.0->librosa) (1.4.4) Requirement already satisfied: six>=1.3 in c:\programdata\anaconda3\lib\site-packages (from resampy>=0.2.2->librosa) (1.15.0) Requirement already satisfied: threadpoolctl>=2.0.0 in c:\programdata\anaconda3\lib\site-packages (from scikit-learn!=0.19.0,>=0.14.0->librosa) (2.1.0) Requirement already satisfied: cffi>=1.0 in c:\programdata\anaconda3\lib\site-packages (from soundfile>=0.10.2->librosa) (1.14.5) Requirement already satisfied: pycparser in c:\programdata\anaconda3\lib\site-packages (from cffi>=1.0->soundfile>=0.10.2->librosa) (2.20) Requirement already satisfied: chardet<5,>=3.0.2 in c:\programdata\anaconda3\lib\site-packages (from requests->pooch>=1.0->librosa) (4.0.0) Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\programdata\anaconda3\lib\site-packages (from requests->pooch>=1.0->librosa) (1.26.4) Requirement already satisfied: certifi>=2017.4.17 in c:\programdata\anaconda3\lib\site-packages (from requests->pooch>=1.0->librosa) (2020.12.5) Requirement already satisfied: idna<3,>=2.5 in c:\programdata\anaconda3\lib\site-packages (from requests->pooch>=1.0->librosa) (2.10) Note: you may need to restart the kernel to use updated packages.
import librosa
from librosa import display
plt.figure()
librosa.display.waveplot(y = samples, sr = sampling_rate)
plt.xlabel("Time in seconds")
plt.ylabel("Amplitude")
plt.show()
samples = 100
f = 3
x = np.arange(samples)
y1 = np.sin(2*np.pi*f * (x/samples))
plt.figure()
plt.stem(x,y1, 'r', )
plt.plot(x,y1)
plt.xlabel("Time in seconds")
plt.ylabel("Amplitude")
plt.show()
samples = 100
f = 11
x = np.arange(samples)
y2 = 2 * np.sin(2*np.pi*f * (x/samples))
plt.figure()
plt.stem(x,y2, 'r', )
plt.plot(x,y2)
plt.xlabel("Time in seconds")
plt.ylabel("Amplitude")
plt.show()
#Y3 will represent the resultant signal
y3 = y1 + y2
plt.plot(y3)
[<matplotlib.lines.Line2D at 0x1f886ef14f0>]
#FFT plot
import scipy
def fft_plot(audio, sampling_rate):
n = len(audio)
T = 1/sampling_rate
yf = scipy.fft(audio)
xf = np.linspace(0.0, 1.0/(2.0*T), n/2)
fig, ax = plt.subplots()
ax.plot(xf, 2.0/n * np.abs(yf[:n//2]))
plt.grid()
plt.xlabel("Frequency")
plt.ylabel("Magnitude")
return plt.show()
return xf
return yf
# import required library
import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt
# Given
f1 = 25 # Frequency of 1st signal
f2 = 50 # Frequency of 2nd signal
N = 10 # Order of the filter
t = np.linspace(0, 1, 1000)
sig = np.sin(2*np.pi*f1*t) + np.sin(2*np.pi*f2*t)
# Display the signal
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax1.plot(t, sig)
ax1.set_title('25 Hz and 50 Hz sinusoids')
ax1.axis([0, 1, -2, 2])
sos = signal.butter(50, 35, 'lp', fs=1000, output='sos')
filtered = signal.sosfiltfilt(sos, sig)
# Display the output signal
ax2.plot(t, filtered)
ax2.set_title('After 35 Hz Low-pass filter')
ax2.axis([0, 1, -2, 2])
ax2.set_xlabel('Time [seconds]')
plt.tight_layout()
plt.show()
# import required library
import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt
# Given
f1 = 25 # Frequency of 1st signal
f2 = 50 # Frequency of 2nd signal
N = 10 # Order of the filter
t = np.linspace(0, 1, 1000)
sig = np.sin(2*np.pi*f1*t) + np.sin(2*np.pi*f2*t)
# Display the signal
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
ax1.plot(t, sig)
ax1.set_title('25 Hz and 50 Hz sinusoids')
ax1.axis([0, 1, -2, 2])
sos = signal.butter(50, 35, 'hp', fs=1000, output='sos')
filtered = signal.sosfiltfilt(sos, sig)
# Display the output signal
ax2.plot(t, filtered)
ax2.set_title(' After 35 Hz High-pass filter')
ax2.axis([0, 1, -2, 2])
ax2.set_xlabel('Time [seconds]')
plt.tight_layout()
plt.show()
#frequency domain representation
fourierTransform = np.fft.fft(signals)/len(signals) # Normalize amplitude
fourierTransform = fourierTransform[range(int(len(signals)/2))] # Exclude sampling frequency
tpCount = len(signals)
values = np.arange(int(tpCount/2))
timePeriod = tpCount/fs
frequencies = values/timePeriod
plt.plot (frequencies, abs(fourierTransform))
plt.title('Fourier transform depicting the frequency components')
plt.ylabel('Amplitude',color = 'r')
plt.xlabel('Frequency',color = 'r')
Text(0.5, 0, 'Frequency')
plt.plot (data1)
plt.title('Signal Forest')
plt.ylabel('Amplitude',color = 'r')
plt.xlabel('Time',color = 'r')
Text(0.5, 0, 'Time')
from scipy.fftpack import fft
import scipy.io.wavfile as wavfile
import scipy
import scipy.fftpack as fftpk
import numpy as np
from matplotlib import pyplot as plt
fs1, data1 = wavfile.read("Forest.wav")
FFT = abs(np.fft.fft(data1))
freqs = fftpk.fftfreq(len(FFT), (1.0/fs1))
plt.plot(freqs[range(len(FFT)//2)], FFT[range(len(FFT)//2)])
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()
pip install librosa
Requirement already satisfied: librosa in c:\programdata\anaconda3\lib\site-packages (0.8.1)Note: you may need to restart the kernel to use updated packages. Requirement already satisfied: scikit-learn!=0.19.0,>=0.14.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (0.24.1) Requirement already satisfied: numba>=0.43.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (0.53.1) Requirement already satisfied: joblib>=0.14 in c:\programdata\anaconda3\lib\site-packages (from librosa) (1.0.1) Requirement already satisfied: pooch>=1.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (1.5.2) Requirement already satisfied: scipy>=1.0.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (1.6.2) Requirement already satisfied: packaging>=20.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (20.9) Requirement already satisfied: audioread>=2.0.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (2.1.9) Requirement already satisfied: soundfile>=0.10.2 in c:\programdata\anaconda3\lib\site-packages (from librosa) (0.10.3.post1) Requirement already satisfied: decorator>=3.0.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (5.0.6) Requirement already satisfied: resampy>=0.2.2 in c:\programdata\anaconda3\lib\site-packages (from librosa) (0.2.2) Requirement already satisfied: numpy>=1.15.0 in c:\programdata\anaconda3\lib\site-packages (from librosa) (1.20.1) Requirement already satisfied: setuptools in c:\programdata\anaconda3\lib\site-packages (from numba>=0.43.0->librosa) (52.0.0.post20210125) Requirement already satisfied: llvmlite<0.37,>=0.36.0rc1 in c:\programdata\anaconda3\lib\site-packages (from numba>=0.43.0->librosa) (0.36.0) Requirement already satisfied: pyparsing>=2.0.2 in c:\programdata\anaconda3\lib\site-packages (from packaging>=20.0->librosa) (2.4.7) Requirement already satisfied: appdirs in c:\programdata\anaconda3\lib\site-packages (from pooch>=1.0->librosa) (1.4.4) Requirement already satisfied: requests in c:\programdata\anaconda3\lib\site-packages (from pooch>=1.0->librosa) (2.25.1) Requirement already satisfied: six>=1.3 in c:\programdata\anaconda3\lib\site-packages (from resampy>=0.2.2->librosa) (1.15.0) Requirement already satisfied: threadpoolctl>=2.0.0 in c:\programdata\anaconda3\lib\site-packages (from scikit-learn!=0.19.0,>=0.14.0->librosa) (2.1.0) Requirement already satisfied: cffi>=1.0 in c:\programdata\anaconda3\lib\site-packages (from soundfile>=0.10.2->librosa) (1.14.5) Requirement already satisfied: pycparser in c:\programdata\anaconda3\lib\site-packages (from cffi>=1.0->soundfile>=0.10.2->librosa) (2.20) Requirement already satisfied: chardet<5,>=3.0.2 in c:\programdata\anaconda3\lib\site-packages (from requests->pooch>=1.0->librosa) (4.0.0) Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\programdata\anaconda3\lib\site-packages (from requests->pooch>=1.0->librosa) (1.26.4) Requirement already satisfied: certifi>=2017.4.17 in c:\programdata\anaconda3\lib\site-packages (from requests->pooch>=1.0->librosa) (2020.12.5) Requirement already satisfied: idna<3,>=2.5 in c:\programdata\anaconda3\lib\site-packages (from requests->pooch>=1.0->librosa) (2.10)
import numpy as np
from scipy.signal import butter,filtfilt
!pip install plotly
Requirement already satisfied: plotly in c:\programdata\anaconda3\lib\site-packages (5.5.0) Requirement already satisfied: tenacity>=6.2.0 in c:\programdata\anaconda3\lib\site-packages (from plotly) (8.0.1) Requirement already satisfied: six in c:\programdata\anaconda3\lib\site-packages (from plotly) (1.15.0)
import chart_studio.plotly
import plotly.offline as pyoff
import plotly.graph_objs as go
import plotly.figure_factory as ff
# Filter requirements.
T = 10.0
cutoff = 2
nyq = 0.5 * fs
order = 2
n = int(T * fs)
def butter_highpass(cutoff, fs, order=5):
nyq = 0.5 * fs
normal_cutoff = cutoff / nyq
b, a = signal.butter(order, normal_cutoff, btype = "high", analog = False)
return b, a
def butter_highpass_filter(data, cutoff, fs, order=5):
b, a = butter_highpass(cutoff, fs, order=order)
y = signal.filtfilt(b, a, data)
return y
# Filter the data, and plot both the original and filtered signals.
y = butter_highpass_filter(data1, cutoff, fs1, order)
fig = go.Figure()
fig.add_trace(go.Scatter(
y = data1,
line = dict(shape = 'spline' ),
name = 'signal with noise'
))
fig.add_trace(go.Scatter(
y = y,
line = dict(shape = 'spline' ),
name = 'filtered signal (high pass)'
))
fig.show()
def butter_lowpass_filter(data, cutoff, fs, order):
normal_cutoff = cutoff / nyq
# Get the filter coefficients
b, a = butter(order, normal_cutoff, btype='low', analog=False)
y = filtfilt(b, a, data)
return y
import plotly.graph_objects as go
# Filter the data, and plot both the original and filtered signals.
y = butter_lowpass_filter(data1, cutoff, fs1, order)
fig = go.Figure()
fig.add_trace(go.Scatter(
y = data1,
line = dict(shape = 'spline' ),
name = 'signal with noise'
))
fig.add_trace(go.Scatter(
y = y,
line = dict(shape = 'spline' ),
name = 'filtered signal (low pass)'
))
fig.show()
fps = 1500
filtered_forest = butter_highpass_filter(data1, 10, fps)
plt.plot(filtered_forest)
[<matplotlib.lines.Line2D at 0x1f88d0f5d60>]
fps = 1500
order=5
filtered_forest_1 = butter_lowpass_filter(data1, 10, fps, order)
plt.plot(filtered_forest_1)
[<matplotlib.lines.Line2D at 0x1f88d1f5fd0>]
fps = 1500
order=5
filtered_forest_1 = butter_lowpass_filter(data1, 10, fps, order)
wavfile.write('lowpass_filter.wav',fps,data1)
fps = 1500
order=5
filtered_forest = butter_highpass_filter(data1, 10, fps, order)
wavfile.write('highpass_filter.wav',fps,data1)
fs3,data3 = wavfile.read('lowpass_filter.wav')
Audio(data=data3,rate=fs3)
fs4,data4 = wavfile.read('highpass_filter.wav')
Audio(data=data4,rate=fs4)
from scipy.io import wavfile
fs, data = wavfile.read(r'C:\Users\JAY GOYAL\Forest.wav')
Audio(data=data, rate=fs)
from IPython.display import Audio
Audio(data=data, rate=fs)
plt.plot(data)
[<matplotlib.lines.Line2D at 0x1f88b8588b0>]
#Importance of transforms
print("Sampling frequency[number of samples in 1 sec]: ", fs)
Sampling frequency[number of samples in 1 sec]: 44100
print("Length of audio file in samples: ",data.size)
Length of audio file in samples: 206388
print("Length of audio file in seconds: ",data.size/fs)
Length of audio file in seconds: 4.68
f5 = abs(np.fft.fft(data))
N = len(data)
k = np.arange(0,N)
FF = k*(fs/N)
plt.figure(figsize=(14,4))
plt.plot(FF,f5)
[<matplotlib.lines.Line2D at 0x1f88d5c0d00>]
f5 = abs(np.fft.fft(data))
N = len(data)
k = np.arange(0,N)
FF = k*(fs/N)
plt.figure(figsize=(14,4))
plt.plot(FF[0:int(len(f5)/2)],f5[0:int(len(f5)/2)])
[<matplotlib.lines.Line2D at 0x1f88da6e580>]
#Filter
fc = 1000
w = fc/(fs/2)
b,a = signal.butter(5,w,'low')
print(b,'\n',a)
output_data = signal.filtfilt(b,a,data)
plt.figure(figsize=(14,4))
plt.plot(output_data)
plt.title('data pass through low pass filter')
plt.xlabel('Amplitude', color='r')
plt.ylabel('Frequency', color='r')
[1.46896340e-06 7.34481698e-06 1.46896340e-05 1.46896340e-05 7.34481698e-06 1.46896340e-06] [ 1. -4.53905152 8.26066093 -7.53334038 3.44208742 -0.63030945]
Text(0, 0.5, 'Frequency')
f6 = abs(np.fft.fft(data))
N = len(data)
k = np.arange(0,N)
FF = k*(fs/N)
plt.figure(figsize=(14,4))
plt.plot(FF[0:int(len(f6)/2)],f6[0:int(len(f5)/2)])
[<matplotlib.lines.Line2D at 0x1f88cb55400>]
from IPython.display import Audio
Audio(data=output_data, rate=fs)
#Filter
fc = 1000
w = fc/(fs/2)
b,a = signal.butter(5,w,'low')
print(b,'\n',a)
output_data_1 = signal.filtfilt(b,a,data)
plt.figure(figsize=(14,4))
plt.plot(output_data_1)
plt.title('data pass through high pass filter')
plt.xlabel('Amplitude', color='r')
plt.ylabel('Frequency', color='r')
[1.46896340e-06 7.34481698e-06 1.46896340e-05 1.46896340e-05 7.34481698e-06 1.46896340e-06] [ 1. -4.53905152 8.26066093 -7.53334038 3.44208742 -0.63030945]
Text(0, 0.5, 'Frequency')
f6 = abs(np.fft.fft(data))
N = len(data)
k = np.arange(0,N)
FF = k*(fs/N)
plt.figure(figsize=(14,4))
plt.plot(FF[0:int(len(f6)/2)],f6[0:int(len(f6)/2)])
[<matplotlib.lines.Line2D at 0x1f88cbfa070>]
from IPython.display import Audio
Audio(data=output_data_1, rate=fs)
wavfile.write('highpassfilter.wav',fc,output_data_1)
wavfile.write('lowpassfilter.wav',fc,output_data)